{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9f528a4c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using the Community license in this session. If you have a full Xpress license, first set the XPAUTH_PATH environment variable to the full path to your license file, xpauth.xpr, and then restart Python. If you want to use the FICO Community license and no longer want to see this message, set the XPAUTH_PATH environment variable to: /home/maged/anaconda3/envs/balance/lib/python3.8/site-packages/xpress/license/community-xpauth.xpr\n",
      "NB: setting XPAUTH_PATH will also affect any other Xpress products installed on your system.\n"
     ]
    }
   ],
   "source": [
    "# Importing modules\n",
    "try:\n",
    "    import hsbalance as hs;\n",
    "except ImportError:\n",
    "    !pip install hsbalance\n",
    "    import hsbalance as hs;\n",
    "try:\n",
    "    import matplotlib as plt\n",
    "except ImportError:\n",
    "    !pip install matplotlib\n",
    "    import matplotlib as plt\n",
    "try:\n",
    "    import ipympl\n",
    "except ImportError:\n",
    "    !pip install ipympl\n",
    "    import ipympl"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "122e26c5",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib widget"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e7f60a45",
   "metadata": {},
   "source": [
    "# Introduction\n",
    "In this notebook, We try to reproduce the results of test case in this paper:  [Jeong](https://hal.archives-ouvertes.fr/hal-01890082)    \n",
    "\n",
    "Sena Jeong, Eojin Kim, Kyungho Jeong, Doyoung Jeon, Yong Bok Lee. Effects of Residual Imbalance\n",
    "on the Rotordynamic Performance of Variable-Speed Turbo Blower. 16th International Symposium\n",
    "on Transport Phenomena and Dynamics of Rotating Machinery, Apr 2016, Honolulu, United States.\n",
    "�hal-01890082�"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04810b6f",
   "metadata": {},
   "source": [
    "\"\"\"This paper has provided a successful experiment and  \n",
    "simulation results for verifying residual imbalance effect and  \n",
    "rotordynamic performance with two-plane multi-speed  \n",
    "balancing by applying influence coefficient method. A rotor  \n",
    "bearing system application of a variable turbo blower,  \n",
    "experiments were conducted to ensure rotational stability.  \n",
    "Base on the least square balancing technique, the  \n",
    "experiment was determined the multi-speed point. It was  \n",
    "measured peak to peak vibration and phase angle at each  \n",
    "speed, according to the multi-speed condition, calculated the  \n",
    "residual unbalance and correction value. The rotational  \n",
    "speed of the variable speed application turbo machine is up  \n",
    "to 17,000 rpm, the maximum rotational speed is 20,000 rpm.  \"\"\""
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5636de9f",
   "metadata": {},
   "source": [
    "In this case study, the author tried to see the effect of calculating the least square model from different speed data.  \n",
    "This is very good example to show how it is easy and explicit to use `hsbalance` module to test different scenarios."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8810ea8e",
   "metadata": {},
   "source": [
    "# Trial Mass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "82fd0138",
   "metadata": {},
   "outputs": [],
   "source": [
    "# from Table 1\n",
    "U = hs.convert_math_cart(['1.369@-11.25', '2.039@-22.5'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a5efab10",
   "metadata": {},
   "source": [
    "## Intial Conditions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "d6aa95ac",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Rewriting table 2 for zero rotor data (intiail conditions)\n",
    "A_17000 = [['0.1750@-179.2'],\n",
    "          ['0.0091@134.9']]\n",
    "A_18000 = [['0.1838@-170.9'],\n",
    "          ['0.0313@137.3']]\n",
    "A_18500 = [['0.2472@179.4'],\n",
    "          ['0.0207@118.9']]\n",
    "A_19000 = [['0.4425@-179.6'],\n",
    "          ['0.0243@95.7']]\n",
    "A_19500 = [['0.6830@-160.7'],\n",
    "          ['0.036@102.6']]\n",
    "A_20000 = [['0.6905@-150.6'],\n",
    "          ['0.0383@99.2']]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "96cffd19",
   "metadata": {},
   "source": [
    "# Creating Influence Matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4d6b25a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Creating trial run matrix B\n",
    "B_17000 = [['0.1527@-24.7', '0.3343@177.6'],\n",
    "          ['0.0245@-172.4', '0.0308@42.0']]\n",
    "\n",
    "B_18000 = [['0.1395@-0.1', '0.3668@-173.1'],\n",
    "          ['0.0147@-130.7', '0.0384@81.6']]\n",
    "\n",
    "B_18500 = [['0.1285@-19.8', '0.4536@-180.0'],\n",
    "          ['0.0121@179.8', '0.0385@73.2']]\n",
    "\n",
    "B_19000 = [['0.1882@-18.6', '0.0192@178.2'],\n",
    "          ['0.0192@178.2', '0.0469@68.7']]\n",
    "\n",
    "B_19500 = [['0.2847@18.2', '0.7713@-154.2'],\n",
    "          ['0.0119@179.9', '0.0493@79.0']]\n",
    "\n",
    "B_20000 = [['0.2705@55.4', '0.7650@-147.2'],\n",
    "          ['0.0234@138.7', '0.0601@71.3']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "97ae862c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Creating Alpha (IC matrix)\n",
    "alpha_17000 = hs.Alpha('17000')\n",
    "A_17000, B_17000 = list(map(hs.convert_math_cart, [A_17000, B_17000]))\n",
    "alpha_17000.add(A=A_17000, B=B_17000, U=U)\n",
    "\n",
    "alpha_18000 = hs.Alpha('18000')\n",
    "A_18000, B_18000 = list(map(hs.convert_math_cart, [A_18000, B_18000]))\n",
    "alpha_18000.add(A=A_17000, B=B_17000, U=U)\n",
    "\n",
    "alpha_18500 = hs.Alpha('18500')\n",
    "A_18500, B_18500 = list(map(hs.convert_math_cart, [A_18500, B_18500]))\n",
    "alpha_18500.add(A=A_18500, B=B_18500, U=U)\n",
    "\n",
    "alpha_19000 = hs.Alpha('19000')\n",
    "A_19000, B_19000 = list(map(hs.convert_math_cart, [A_19000, B_19000]))\n",
    "alpha_19000.add(A=A_19000, B=B_19000, U=U)\n",
    "\n",
    "alpha_19500 = hs.Alpha('19500')\n",
    "A_19500, B_19500 = list(map(hs.convert_math_cart, [A_19500, B_19500]))\n",
    "alpha_19500.add(A=A_19500, B=B_19500, U=U)\n",
    "\n",
    "alpha_20000 = hs.Alpha('20000')\n",
    "A_20000, B_20000 = list(map(hs.convert_math_cart, [A_20000, B_20000]))\n",
    "alpha_20000.add(A=A_20000, B=B_20000, U=U)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa5072f1",
   "metadata": {},
   "source": [
    "# Creating Conditions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "5abb7e16",
   "metadata": {},
   "outputs": [],
   "source": [
    "condition_17000 = hs.Condition('17000')\n",
    "condition_17000.add(alpha=alpha_17000, A=A_17000)\n",
    "condition_18000 = hs.Condition('18000')\n",
    "condition_18000.add(alpha=alpha_18000, A=A_18000)\n",
    "condition_18500 = hs.Condition('18500')\n",
    "condition_18500.add(alpha=alpha_18500, A=A_18500)\n",
    "condition_19000 = hs.Condition('19000')\n",
    "condition_19000.add(alpha=alpha_19000, A=A_19000)\n",
    "condition_19500 = hs.Condition('19500')\n",
    "condition_19500.add(alpha=alpha_19500, A=A_19500)\n",
    "condition_20000 = hs.Condition('20000')\n",
    "condition_20000.add(alpha=alpha_20000, A=A_20000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a947b55",
   "metadata": {},
   "source": [
    "# Creating LeastSquare Model for Cases"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "24ca9ce2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "MODEL\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "MODEL TYPE\n",
      "==================================================\n",
      "LeastSquares\n",
      "==================================================\n",
      "End of MODEL TYPE\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "MODEL NAME\n",
      "==================================================\n",
      "case1\n",
      "==================================================\n",
      "End of MODEL NAME\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "CONDITIONS\n",
      "==================================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Operation Condition\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "========================================\n",
      "17000\n",
      "========================================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Condition IC Matrix\n",
      "========================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Influence Coefficient Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "==============================\n",
      "17000\n",
      "==============================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Coefficient Values\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1    0.233 @ 0.2  0.078 @ 196.6\n",
      "Sensor 2  0.015 @ 219.7   0.016 @ 48.3\n",
      "==============================\n",
      "End of Coefficient Values\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "==============================\n",
      "              Vibration\n",
      "Sensor 1  0.175 @ 180.8\n",
      "Sensor 2  0.009 @ 134.9\n",
      "==============================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Runs Vibration\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1  0.153 @ 335.3  0.334 @ 177.6\n",
      "Sensor 2  0.025 @ 187.6   0.031 @ 42.0\n",
      "==============================\n",
      "End of Trial Runs Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Masses\n",
      "==============================\n",
      "                  Mass\n",
      "Plane 1  1.369 @ 348.8\n",
      "Plane 2  2.039 @ 337.5\n",
      "==============================\n",
      "End of Trial Masses\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "========================================\n",
      "End of Condition IC Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "========================================\n",
      "              Vibration\n",
      "Sensor 1  0.175 @ 180.8\n",
      "Sensor 2  0.009 @ 134.9\n",
      "========================================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Operation Condition\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "========================================\n",
      "18500\n",
      "========================================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Condition IC Matrix\n",
      "========================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Influence Coefficient Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "==============================\n",
      "18500\n",
      "==============================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Coefficient Values\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1    0.271 @ 4.1  0.101 @ 203.2\n",
      "Sensor 2  0.013 @ 274.6   0.014 @ 64.1\n",
      "==============================\n",
      "End of Coefficient Values\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "==============================\n",
      "              Vibration\n",
      "Sensor 1  0.247 @ 179.4\n",
      "Sensor 2  0.021 @ 118.9\n",
      "==============================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Runs Vibration\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1  0.129 @ 340.2  0.454 @ 180.0\n",
      "Sensor 2  0.012 @ 179.8   0.038 @ 73.2\n",
      "==============================\n",
      "End of Trial Runs Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Masses\n",
      "==============================\n",
      "                  Mass\n",
      "Plane 1  1.369 @ 348.8\n",
      "Plane 2  2.039 @ 337.5\n",
      "==============================\n",
      "End of Trial Masses\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "========================================\n",
      "End of Condition IC Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "========================================\n",
      "              Vibration\n",
      "Sensor 1  0.247 @ 179.4\n",
      "Sensor 2  0.021 @ 118.9\n",
      "========================================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "==================================================\n",
      "End of CONDITIONS\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "SOLUTION\n",
      "==================================================\n",
      "        Correction Masses\n",
      "Plane 1     0.935 @ 357.4\n",
      "Plane 2     0.261 @ 338.7\n",
      "==================================================\n",
      "End of SOLUTION\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "RMSE\n",
      "==================================================\n",
      "0.0178\n",
      "==================================================\n",
      "End of RMSE\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Resiudal Vibration Expected\n",
      "==================================================\n",
      "         Expected Vibration\n",
      "Sensor 1      0.025 @ 335.9\n",
      "Sensor 2      0.014 @ 180.1\n",
      "Sensor 3      0.022 @ 158.1\n",
      "Sensor 4      0.011 @ 130.3\n",
      "==================================================\n",
      "End of Resiudal Vibration Expected\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n"
     ]
    }
   ],
   "source": [
    "# Case 1 \n",
    "model_case1 = hs.LeastSquares(name='case1', conditions=\n",
    "                              [condition_17000, condition_18500])\n",
    "model_case1.solve()\n",
    "print(model_case1.info())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "114808ef",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "MODEL\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "MODEL TYPE\n",
      "==================================================\n",
      "LeastSquares\n",
      "==================================================\n",
      "End of MODEL TYPE\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "MODEL NAME\n",
      "==================================================\n",
      "case2\n",
      "==================================================\n",
      "End of MODEL NAME\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "CONDITIONS\n",
      "==================================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Operation Condition\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "========================================\n",
      "17000\n",
      "========================================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Condition IC Matrix\n",
      "========================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Influence Coefficient Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "==============================\n",
      "17000\n",
      "==============================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Coefficient Values\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1    0.233 @ 0.2  0.078 @ 196.6\n",
      "Sensor 2  0.015 @ 219.7   0.016 @ 48.3\n",
      "==============================\n",
      "End of Coefficient Values\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "==============================\n",
      "              Vibration\n",
      "Sensor 1  0.175 @ 180.8\n",
      "Sensor 2  0.009 @ 134.9\n",
      "==============================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Runs Vibration\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1  0.153 @ 335.3  0.334 @ 177.6\n",
      "Sensor 2  0.025 @ 187.6   0.031 @ 42.0\n",
      "==============================\n",
      "End of Trial Runs Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Masses\n",
      "==============================\n",
      "                  Mass\n",
      "Plane 1  1.369 @ 348.8\n",
      "Plane 2  2.039 @ 337.5\n",
      "==============================\n",
      "End of Trial Masses\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "========================================\n",
      "End of Condition IC Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "========================================\n",
      "              Vibration\n",
      "Sensor 1  0.175 @ 180.8\n",
      "Sensor 2  0.009 @ 134.9\n",
      "========================================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Operation Condition\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "========================================\n",
      "19500\n",
      "========================================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Condition IC Matrix\n",
      "========================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Influence Coefficient Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "==============================\n",
      "19500\n",
      "==============================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Coefficient Values\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1   0.707 @ 30.2  0.059 @ 268.1\n",
      "Sensor 2  0.026 @ 274.7   0.011 @ 60.0\n",
      "==============================\n",
      "End of Coefficient Values\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "==============================\n",
      "              Vibration\n",
      "Sensor 1  0.683 @ 199.3\n",
      "Sensor 2  0.036 @ 102.6\n",
      "==============================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Runs Vibration\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1   0.285 @ 18.2  0.771 @ 205.8\n",
      "Sensor 2  0.012 @ 179.9   0.049 @ 79.0\n",
      "==============================\n",
      "End of Trial Runs Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Masses\n",
      "==============================\n",
      "                  Mass\n",
      "Plane 1  1.369 @ 348.8\n",
      "Plane 2  2.039 @ 337.5\n",
      "==============================\n",
      "End of Trial Masses\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "========================================\n",
      "End of Condition IC Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "========================================\n",
      "              Vibration\n",
      "Sensor 1  0.683 @ 199.3\n",
      "Sensor 2  0.036 @ 102.6\n",
      "========================================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "==================================================\n",
      "End of CONDITIONS\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "SOLUTION\n",
      "==================================================\n",
      "        Correction Masses\n",
      "Plane 1     1.047 @ 350.5\n",
      "Plane 2     1.006 @ 310.1\n",
      "==================================================\n",
      "End of SOLUTION\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "RMSE\n",
      "==================================================\n",
      "0.0041\n",
      "==================================================\n",
      "End of RMSE\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Resiudal Vibration Expected\n",
      "==================================================\n",
      "         Expected Vibration\n",
      "Sensor 1       0.001 @ 78.9\n",
      "Sensor 2      0.004 @ 205.7\n",
      "Sensor 3      0.001 @ 321.0\n",
      "Sensor 4        0.01 @ 87.4\n",
      "==================================================\n",
      "End of Resiudal Vibration Expected\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n"
     ]
    }
   ],
   "source": [
    "## Case 2\n",
    "\n",
    "model_case2 = hs.LeastSquares(name='case2', conditions=\n",
    "                              [condition_17000, condition_19500])\n",
    "model_case2.solve()\n",
    "print(model_case2.info())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "737b0784",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "MODEL\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "MODEL TYPE\n",
      "==================================================\n",
      "LeastSquares\n",
      "==================================================\n",
      "End of MODEL TYPE\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "MODEL NAME\n",
      "==================================================\n",
      "case3\n",
      "==================================================\n",
      "End of MODEL NAME\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "CONDITIONS\n",
      "==================================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Operation Condition\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "========================================\n",
      "17000\n",
      "========================================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Condition IC Matrix\n",
      "========================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Influence Coefficient Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "==============================\n",
      "17000\n",
      "==============================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Coefficient Values\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1    0.233 @ 0.2  0.078 @ 196.6\n",
      "Sensor 2  0.015 @ 219.7   0.016 @ 48.3\n",
      "==============================\n",
      "End of Coefficient Values\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "==============================\n",
      "              Vibration\n",
      "Sensor 1  0.175 @ 180.8\n",
      "Sensor 2  0.009 @ 134.9\n",
      "==============================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Runs Vibration\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1  0.153 @ 335.3  0.334 @ 177.6\n",
      "Sensor 2  0.025 @ 187.6   0.031 @ 42.0\n",
      "==============================\n",
      "End of Trial Runs Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Masses\n",
      "==============================\n",
      "                  Mass\n",
      "Plane 1  1.369 @ 348.8\n",
      "Plane 2  2.039 @ 337.5\n",
      "==============================\n",
      "End of Trial Masses\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "========================================\n",
      "End of Condition IC Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "========================================\n",
      "              Vibration\n",
      "Sensor 1  0.175 @ 180.8\n",
      "Sensor 2  0.009 @ 134.9\n",
      "========================================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Operation Condition\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "========================================\n",
      "18500\n",
      "========================================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Condition IC Matrix\n",
      "========================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Influence Coefficient Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "==============================\n",
      "18500\n",
      "==============================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Coefficient Values\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1    0.271 @ 4.1  0.101 @ 203.2\n",
      "Sensor 2  0.013 @ 274.6   0.014 @ 64.1\n",
      "==============================\n",
      "End of Coefficient Values\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "==============================\n",
      "              Vibration\n",
      "Sensor 1  0.247 @ 179.4\n",
      "Sensor 2  0.021 @ 118.9\n",
      "==============================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Runs Vibration\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1  0.129 @ 340.2  0.454 @ 180.0\n",
      "Sensor 2  0.012 @ 179.8   0.038 @ 73.2\n",
      "==============================\n",
      "End of Trial Runs Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Masses\n",
      "==============================\n",
      "                  Mass\n",
      "Plane 1  1.369 @ 348.8\n",
      "Plane 2  2.039 @ 337.5\n",
      "==============================\n",
      "End of Trial Masses\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "========================================\n",
      "End of Condition IC Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "========================================\n",
      "              Vibration\n",
      "Sensor 1  0.247 @ 179.4\n",
      "Sensor 2  0.021 @ 118.9\n",
      "========================================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Operation Condition\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "========================================\n",
      "19500\n",
      "========================================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Condition IC Matrix\n",
      "========================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Influence Coefficient Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "==============================\n",
      "19500\n",
      "==============================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Coefficient Values\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1   0.707 @ 30.2  0.059 @ 268.1\n",
      "Sensor 2  0.026 @ 274.7   0.011 @ 60.0\n",
      "==============================\n",
      "End of Coefficient Values\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "==============================\n",
      "              Vibration\n",
      "Sensor 1  0.683 @ 199.3\n",
      "Sensor 2  0.036 @ 102.6\n",
      "==============================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Runs Vibration\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1   0.285 @ 18.2  0.771 @ 205.8\n",
      "Sensor 2  0.012 @ 179.9   0.049 @ 79.0\n",
      "==============================\n",
      "End of Trial Runs Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Masses\n",
      "==============================\n",
      "                  Mass\n",
      "Plane 1  1.369 @ 348.8\n",
      "Plane 2  2.039 @ 337.5\n",
      "==============================\n",
      "End of Trial Masses\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "========================================\n",
      "End of Condition IC Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "========================================\n",
      "              Vibration\n",
      "Sensor 1  0.683 @ 199.3\n",
      "Sensor 2  0.036 @ 102.6\n",
      "========================================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "==================================================\n",
      "End of CONDITIONS\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "SOLUTION\n",
      "==================================================\n",
      "        Correction Masses\n",
      "Plane 1     1.016 @ 349.5\n",
      "Plane 2       0.6 @ 299.0\n",
      "==================================================\n",
      "End of SOLUTION\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "RMSE\n",
      "==================================================\n",
      "0.013\n",
      "==================================================\n",
      "End of RMSE\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Resiudal Vibration Expected\n",
      "==================================================\n",
      "         Expected Vibration\n",
      "Sensor 1      0.028 @ 334.0\n",
      "Sensor 2      0.011 @ 196.4\n",
      "Sensor 3      0.023 @ 157.2\n",
      "Sensor 4      0.006 @ 121.1\n",
      "Sensor 5        0.0 @ 107.8\n",
      "Sensor 6       0.01 @ 114.8\n",
      "==================================================\n",
      "End of Resiudal Vibration Expected\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n"
     ]
    }
   ],
   "source": [
    "## Case 3\n",
    "\n",
    "model_case3 = hs.LeastSquares(name='case3',conditions=\n",
    "                              [condition_17000, condition_18500,\n",
    "                              condition_19500])\n",
    "model_case3.solve()\n",
    "print(model_case3.info())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "665b31f7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "MODEL\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "MODEL TYPE\n",
      "==================================================\n",
      "LeastSquares\n",
      "==================================================\n",
      "End of MODEL TYPE\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "MODEL NAME\n",
      "==================================================\n",
      "case4\n",
      "==================================================\n",
      "End of MODEL NAME\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "CONDITIONS\n",
      "==================================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Operation Condition\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "========================================\n",
      "17000\n",
      "========================================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Condition IC Matrix\n",
      "========================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Influence Coefficient Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "==============================\n",
      "17000\n",
      "==============================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Coefficient Values\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1    0.233 @ 0.2  0.078 @ 196.6\n",
      "Sensor 2  0.015 @ 219.7   0.016 @ 48.3\n",
      "==============================\n",
      "End of Coefficient Values\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "==============================\n",
      "              Vibration\n",
      "Sensor 1  0.175 @ 180.8\n",
      "Sensor 2  0.009 @ 134.9\n",
      "==============================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Runs Vibration\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1  0.153 @ 335.3  0.334 @ 177.6\n",
      "Sensor 2  0.025 @ 187.6   0.031 @ 42.0\n",
      "==============================\n",
      "End of Trial Runs Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Masses\n",
      "==============================\n",
      "                  Mass\n",
      "Plane 1  1.369 @ 348.8\n",
      "Plane 2  2.039 @ 337.5\n",
      "==============================\n",
      "End of Trial Masses\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "========================================\n",
      "End of Condition IC Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "========================================\n",
      "              Vibration\n",
      "Sensor 1  0.175 @ 180.8\n",
      "Sensor 2  0.009 @ 134.9\n",
      "========================================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Operation Condition\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "========================================\n",
      "19000\n",
      "========================================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Condition IC Matrix\n",
      "========================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Influence Coefficient Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "==============================\n",
      "19000\n",
      "==============================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Coefficient Values\n",
      "==============================\n",
      "                Plane 1       Plane 2\n",
      "Sensor 1    0.455 @ 6.0  0.208 @ 23.0\n",
      "Sensor 2  0.021 @ 245.8  0.014 @ 67.6\n",
      "==============================\n",
      "End of Coefficient Values\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "==============================\n",
      "              Vibration\n",
      "Sensor 1  0.443 @ 180.4\n",
      "Sensor 2   0.024 @ 95.7\n",
      "==============================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Runs Vibration\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1  0.188 @ 341.4  0.019 @ 178.2\n",
      "Sensor 2  0.019 @ 178.2   0.047 @ 68.7\n",
      "==============================\n",
      "End of Trial Runs Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Masses\n",
      "==============================\n",
      "                  Mass\n",
      "Plane 1  1.369 @ 348.8\n",
      "Plane 2  2.039 @ 337.5\n",
      "==============================\n",
      "End of Trial Masses\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "========================================\n",
      "End of Condition IC Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "========================================\n",
      "              Vibration\n",
      "Sensor 1  0.443 @ 180.4\n",
      "Sensor 2   0.024 @ 95.7\n",
      "========================================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Operation Condition\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "========================================\n",
      "20000\n",
      "========================================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Condition IC Matrix\n",
      "========================================\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Influence Coefficient Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Name\n",
      "==============================\n",
      "20000\n",
      "==============================\n",
      "End of Name\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Coefficient Values\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1   0.687 @ 47.9  0.042 @ 263.7\n",
      "Sensor 2  0.018 @ 254.1   0.016 @ 59.5\n",
      "==============================\n",
      "End of Coefficient Values\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "==============================\n",
      "              Vibration\n",
      "Sensor 1  0.691 @ 209.4\n",
      "Sensor 2   0.038 @ 99.2\n",
      "==============================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Runs Vibration\n",
      "==============================\n",
      "                Plane 1        Plane 2\n",
      "Sensor 1   0.271 @ 55.4  0.765 @ 212.8\n",
      "Sensor 2  0.023 @ 138.7    0.06 @ 71.3\n",
      "==============================\n",
      "End of Trial Runs Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "Trial Masses\n",
      "==============================\n",
      "                  Mass\n",
      "Plane 1  1.369 @ 348.8\n",
      "Plane 2  2.039 @ 337.5\n",
      "==============================\n",
      "End of Trial Masses\n",
      "++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "========================================\n",
      "End of Condition IC Matrix\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Initial Vibration\n",
      "========================================\n",
      "              Vibration\n",
      "Sensor 1  0.691 @ 209.4\n",
      "Sensor 2   0.038 @ 99.2\n",
      "========================================\n",
      "End of Initial Vibration\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "==================================================\n",
      "End of CONDITIONS\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "SOLUTION\n",
      "==================================================\n",
      "        Correction Masses\n",
      "Plane 1     0.961 @ 345.4\n",
      "Plane 2      0.252 @ 39.5\n",
      "==================================================\n",
      "End of SOLUTION\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "RMSE\n",
      "==================================================\n",
      "0.0373\n",
      "==================================================\n",
      "End of RMSE\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "Resiudal Vibration Expected\n",
      "==================================================\n",
      "         Expected Vibration\n",
      "Sensor 1      0.081 @ 292.8\n",
      "Sensor 2       0.02 @ 167.1\n",
      "Sensor 3      0.026 @ 303.3\n",
      "Sensor 4       0.02 @ 144.3\n",
      "Sensor 5      0.046 @ 161.0\n",
      "Sensor 6      0.031 @ 120.6\n",
      "==================================================\n",
      "End of Resiudal Vibration Expected\n",
      "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n",
      "\n",
      "                   \n"
     ]
    }
   ],
   "source": [
    "## Case 4\n",
    "\n",
    "model_case4 = hs.LeastSquares(name='case4',conditions=\n",
    "                              [condition_17000, condition_19000,\n",
    "                              condition_20000])\n",
    "model_case4.solve()\n",
    "print(model_case4.info())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "93f37a8b",
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_models(models):\n",
    "    residule_vibration = {model.name:abs(model.expected_residual_vibration().ravel()) for model in models}\n",
    "    rmse = {model.name:model.rmse() for model in models}\n",
    "    fig, (ax0, ax1) = plt.subplots(2, 1)\n",
    "    ax0.bar(rmse.keys(), rmse.values())\n",
    "    plt.xlabel('Models')\n",
    "    plt.ylabel('Vibration');\n",
    "    models_number = len(residule_vibration.values())\n",
    "    measuring_points = max((len(array) for array in residule_vibration.values()))\n",
    "\n",
    "    jet= plt.get_cmap('jet')\n",
    "    colors = iter(jet(np.linspace(0,1,models_number)))\n",
    "\n",
    "    step = 0\n",
    "    for array in residule_vibration.values():\n",
    "        ax1.bar(np.arange(len(array)) + step, array, color = next(colors), width = 1/models_number)\n",
    "        step += 1 / (models_number+1)\n",
    "    ax1.legend([model.name for model in models])\n",
    "    ax1.set_xticks(range(measuring_points), ['M.P '+ str(point) for point in range(1, 1+measuring_points)],\n",
    "                  rotation =45);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "1b29dbac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "38777568f00641d8a87efdacc56b5a0e",
       "version_major": 2,
       "version_minor": 0
      },
      "image/png": "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oMuXLzuW3bt3rx588EE1aNBAfn5+6tGjh3bt2uWYv3XrVg0YMED16tVTcHCwnn32WRUVFTnm//KXv1RkZKRat26tjh076tVXX1VhYaH27dtXfR1QizgtAN5999265557nLV6AABQzeLj47Vw4UIlJCQoJydHa9ascdyQ2aBBA61evVo5OTlaunSp3njjDS1ZssSx7NixY9W8eXPt3LlTWVlZmjlzpurWrStJOnLkiAYPHqzhw4dr3759Wrt2rbZu3arY2NgK61FSUqJVq1bJ399fXbt2dX7DayGn3QTyhz/8QR999JF+//vfq379+s7YhMtxEWnFuAkEACp205tAavg1gOfOndO9996r1NRUTZo06SfLv/LKK47HsEmSn5+fli9frvHjx19XdtKkSfL09NTrr7/umLZ161YNHDhQRUVFjr7asGGDRo8erQsXLqhp06Zav369evXqVeH2uQnk5px2DeDixYt15MgRBQQEKCQkxJHyr8nOznbWpgEAQBX7+uuvVVxcrEGDBlU4f+3atVq2bJmOHDmi8+fP68qVK+XCVVxcnCZNmqR3331XkZGRGjlypNq0aSPp6unhffv26b333nOUN8aorKxMR48eVfv27SVJDz74oPbs2aOCggK98cYbGjVqlLZv364mTZo4seW1k9MCYHR0tLNWDQAAqlm9evVuOC8zM1Njx47VvHnzFBUVJX9/f6WlpWnx4sWOMnPnztUvf/lLbdy4UX/+85+VlJSktLQ0DRs2TOfPn9fTTz+tZ5999rp1t2jRwvG1r6+v2rZtq7Zt26pPnz4KDQ3Vm2++qfj4+KptrAU4LQAmJSU5a9UAAKCahYaGql69esrIyLjuFPC2bdvUsmVLzZ492zHt2LFj160jLCxMYWFhmjp1qsaMGaO3335bw4YNU/fu3ZWTk6O2bdtWqk5lZWUqLi6+vQZZnNPfBJKVlaWvv/5aktSxY0d169bN2ZsEAABVzMfHRzNmzND06dPl5eWl+++/X6dPn9ZXX32l0NBQ5ebmKi0tTb169dLGjRv14YcfOpa9ePGipk2bphEjRqhVq1b67rvvtHPnTg0fPlzS1TuI+/Tpo9jYWE2aNEm+vr7KyclRenq6UlNTVVRUpAULFmjo0KFq2rSpCgoKtGLFCp04cUIjR450VZe4NacFwPz8fI0ePVqfffaZGjZsKEn64Ycf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",
      "text/html": [
       "\n",
       "            <div style=\"display: inline-block;\">\n",
       "                <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
       "                    Figure\n",
       "                </div>\n",
       "                <img src='' width=640.0/>\n",
       "            </div>\n",
       "        "
      ],
      "text/plain": [
       "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_models([model_case1, model_case2, model_case3, model_case4])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2bd39be1",
   "metadata": {},
   "source": [
    "As in the paper, case 2 was the best RMSE score. Residual vibration was minminum at bearing a (M.P.1) in case 2."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "90fa1c14",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:balance] *",
   "language": "python",
   "name": "conda-env-balance-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
